package gormDB

import (
	"errors"
	"go.uber.org/zap"
	. "go_tempate/config" // 获取sql操作路径
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

// gorm操作实例
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

var Gorm *gorm.DB

// mysql的gorm链接操作
// ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
func GormInit() {
	//声明错误变量
	var err error

	//gorm链接数据库
	//----------------------------------------------------------------------------------------------------------
	//根据传入的数据库类型进行执行对应的数据库启动
	switch SqlType {
	case "mysql":
		Gorm, err = gorm.Open(mysql.Open(SqlPath), &gorm.Config{})
	default:
		zap.S().Errorf("数据库类型错误；此类型为: %v", SqlType)
		panic(errors.New("数据库类型错误"))
		return
	}

	//如果没有链接成功则弹出报错
	//----------------------------------------------------------------------------------------------------------
	if err != nil {
		zap.S().Errorf("数据库链接失败: %v", err.Error())
		panic(err.Error())
	}

	//配置gorm初始化属性
	//----------------------------------------------------------------------------------------------------------
	gormDB, err := Gorm.DB()

	//如果配置失败则进行日志操作
	if err != nil {
		zap.S().Errorf("数据库初始化配置失败: %v", err.Error())
		panic(err)
	}

	// 最大链接数
	gormDB.SetMaxOpenConns(MaxOpenConns)
	// 最大空闲连接数
	gormDB.SetMaxIdleConns(MaxIdleConns)
	// 每个链接的最大生命周期
	gormDB.SetConnMaxLifetime(time.Duration(Timeout))

	//如果数据库有报错
	//----------------------------------------------------------------------------------------------------------
	if Gorm.Error != nil {
		zap.S().Errorf("数据库报错: %v", Gorm.Error)
		panic(Gorm.Error)
	}

	//执行成功则进行日志操作
	zap.S().Infof("%v连接成功!IP为 %v", SqlType, SqlPath)

}
